"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = "hi, egg";
    }

    /**
     * 登录接口
     */
    async login() {
        // 接收前端发来的登录参数
        const { mobile, code } = this.ctx.request.body;
        // 根据手机号去数据库里面，查询是不是存在该验证码
        const codeObj = await this.service.code.findByMobile(mobile);
        // 如果不存在，就返回错误
        if (!codeObj) {
            this.ctx.body = {
                code: 400,
                message: "请先获取验证码",
            };
            return;
        }
        // 如果存在验证码，检查是不是超过 10 分钟有效期
        if (Date.now() - Date.parse(codeObj.create_time) > 10 * 60000) {
            this.ctx.body = {
                code: 400,
                message: "验证码已过期，请重新获取",
            };
            return;
        }
        // 存在验证码，并且没有过期，那么就校验验证码是否匹配
        if (codeObj.code !== code) {
            this.ctx.body = {
                code: 400,
                message: "验证码不正确，请重新输入",
            };
            return;
        }
        // 删除已经使用过的验证码
        await this.service.code.deleteByMobile(mobile);
        // 验证码匹配，检查用户表，该手机号对应的用户是否存在
        let user = await this.service.user.findByMobile(mobile);
        // 用户不存在，如果是对外系统，这里需要自动完成注册
        if (!user) {
            // 注册这个用户，如果需要填写一些用户信息，我们就先简单处理（给个默认值）
            const res = await this.service.user.add(mobile, mobile, "");
            // 判断是否插入成功
            if (res.affectedRows !== 1) {
                this.ctx.body = {
                    code: 500,
                    message: "用户绑定失败",
                };
                return;
            }
            // 查询出用户信息
            user = await this.service.user.findByMobile(mobile);
        }
        // 用户存在，就生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 查询用户对应的菜单（前端权限）
        const menus = await this.service.user.getMenuByUid(user.id);
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                token,
                user,
                menus,
            },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
